# -*- coding: utf-8 -*-
import numpy as np


class ProfileParameter(object):
    """
    计算轮廓参数
    """
    def __init__(self, altitude, step=1):
        self.altitude = altitude
        self.step = step
        self.para = {}  # 存储轮廓参数

    def get_Ra(self, digit_num=4) -> float:
        """
        计算轮廓的算术平均偏差（arithmetical mean deviation），Ra

        :param digit_num: 保留的小数位数
        :return: Ra
        """
        Ra = np.mean(np.abs(self.altitude))
        Ra = np.round(Ra, digit_num)
        self.para.setdefault('Ra', Ra)
        return Ra

    def get_Rq(self, digit_num=4) -> float:
        """
        计算轮廓的均方根偏差（root mean square deviation），Rq

        :param digit_num: 保留的小数位数
        :return: Rq
        """
        Rq = np.sqrt(np.mean(np.power(self.altitude, 2)))
        Rq = np.round(Rq, digit_num)
        self.para.setdefault('Rq', Rq)
        return Rq

    def get_Rsk(self, digit_num=4) -> float:
        """
        计算轮廓的偏斜度（skewness），Rsk

        :param digit_num: 保留的小数位数
        :return: Rsk
        """
        Rq = self.get_Rq(digit_num=digit_num)
        tri_altitude = np.power(self.altitude, 3)   # 轮廓高度的三次方
        Rsk = np.mean(tri_altitude) / np.power(Rq, 3)
        Rsk = np.round(Rsk, digit_num)
        self.para.setdefault('Rsk', Rsk)
        return Rsk

    def get_Rku(self, digit_num=4) -> float:
        """
        计算轮廓的陡度
        :param digit_num:
        :return: Rku
        """
        Rq = self.get_Rq(digit_num=digit_num)
        four_altitude = np.power(self.altitude, 4)  # 轮廓高度的四次方
        Rku = np.mean(four_altitude) / np.power(Rq, 4)
        Rku = np.round(Rku, digit_num)
        self.para.setdefault('Rku', Rku)
        return Rku


